home *** CD-ROM | disk | FTP | other *** search
- 05/11/1993 EMM501.ZIP V1.01
- ---------- ----------------
-
- This archive contains the following two files:
-
- EMM501.ASM Assembler source
- EMM501.OBJ EMS detection fix for Clipper S'87 - 5.01a
- READ.ME Documentation (this file)
-
- This fix is applicable to:
-
- Clipper 5.01/5.01a
- Clipper S'87
-
- This fix is *not* required with Clipper 5.2 / 5.2a.
-
- THIS REPLACEMENT MODULE HAS NOT BEEN TESTED OR APPROVED BY COMPUTER
- ASSOCIATES INTERNATIONAL.
-
- Disclaimer
- ----------
-
- The software contained within this archive is provided as-is and without
- warranty.
-
- The author makes no claim as to the software's fitness for a specific
- purpose. Under no circumstances will the author be held liable for
- damages of any kind arising out of the use of or inability to use this
- software.
-
- Purpose
- -------
-
- The purpose of this replacement module is to correct deficiencies in
- Clipper's detection of a functional EMS driver when certain EMS emulator
- switches are used. There are two problems that are corrected:
-
- 1) Proper detection of a functional EMS driver
- 2) Proper detection of the (required) pageframe
-
- Use of this fix prevents Clipper from attempting to use EMS memory in
- situations where it erroneously believes it can.
-
- The following tables indicates the various EMS drivers and switches that
- could cause problems prior to these fixes:
-
- EMM Driver DOS Switches Works as is Works with fix
- ---------------------------------------------------------------
- EMM386.EXE 6.0 NOEMS NO YES
- EMM386.EXE 6.0 NOEMS NOVCPI YES YES
- EMM386.EXE 6.0 FRAME=NONE NO YES
- EMM386.EXE 5.0 NOEMS YES YES
- EMM386.EXE 5.0 FR=NONE NO YES
- QEMM386 N/A FRAME=NONE NO YES
- QEMM386 N/A NOEMS YES YES
-
- NOTE: - Summer '87
- ------------------
-
- EMM501.OBJ corrects the EMS detection problem in Summer '87. It does
- *not* correct any other problems that Summer '87 may have / is
- rumoured to have regarding EMS.
-
- These fixes should work equally well with other EMS emulators that
- provide similar switches, such as 386MAX.
-
- Symptoms that indicate you need this fix
- ----------------------------------------
-
- You *will* need this fix if you know that you have set EMS driver
- options that match one of the above settings and the 'Works as is'
- column is 'NO'.
-
- You may need this fix if your program operates normally for a while, and
- then suddenly locks up solid or produces an exception error .AND. the
- program works correctly when //E:0 is set in the Clipper environment.
-
- You may need this fix if your program operates correctly when //E:0 is
- set in the Clipper environment variable, but does not otherwise.
-
- Linking
- -------
-
- Link the replacement OBJ into your program as you would any other OBJ,
- but make sure it is not the first OBJ specified (particularly IMPORTANT
- if you're using Blinker). You should link it into the ROOT of your
- program.
-
- Blinker
- -------
-
- FILE myapp # Your first Clipper OBJ
- BEGINAREA
- FILE abc
- FILE def
- ENDAREA
- FILE EMM501
- LIB ...
-
- RTLINK
- ------
-
- FILE myapp
- FILE EMM501
-
- MSLink or equivalent
- --------------------
-
- link myapp+EMM501 ;
-
- NOTE: Depending on your linker and the version of Clipper, you may get a
- 'duplicate definition' for the symbol '__e_avail' this is expected and
- you may safely ignore this warning.
-
- Problems
- --------
-
- This fix should cause no new problems. If you still have an unexplained
- problem after linking it, please check that you have not linked it as
- the first OBJ. If you still have a problem, it is most *unlikely* to be
- due to this fix.
-
- NOTE: Under no circumstances should you contact Computer Associates
- International, Blink Inc, or ASM Inc, regarding problems with this
- replacement module - they will not be able to help you.
-
- If there are bona-fide problems with this module I would like to hear
- about them and will correct them if possible, but please understand that
- I make no commitment to do so. I can be contacted at the CIS ID listed
- below.
-
- Technical Notes
- ---------------
-
- For those who are interested...
-
- In order to use EMS memory, Clipper requires an EMS driver supporting
- EMS 3.2 or better, and that the driver provide a 64K pageframe.
-
- One of the standard ways of checking for the presence of an EMS driver
- is to look for a particular signature at a particular memory location.
- Under normal circumstances, that signature is 'EMMXXXX0'.
-
- Unfortunately versions of Clipper prior to 5.2 do not properly check for
- this signature, instead they look for just 'EMM' which under normal
- circumstances works ok. However, more recent EMS emulators, such as
- QEMM, EMM386 and 386MAX are capable of providing EMS services without
- the need for a pageframe through the use of a driver switch (such as
- FRAME=NONE, or NOEMS with DOS 6's EMM386). To indicate that full EMS
- services are not available, some of these drivers (but not all) change
- the driver signature to 'EMMQXXX0', so that software checking for
- 'EMMXXXX0' will not find a match, and disable their EMS use.
- Unfortunately, as Clipper only checks for the 'EMM' portion of the
- signature, it does not realise that full EMS services are not available.
-
- This problem is further compounded by another problem - detection that
- the pageframe is not present. After checking the driver is present by
- matching signatures, Clipper asks the driver for the address of the
- pageframe. In the case that the pageframe is not present, the driver
- returns an error code to Clipper, but Clipper ignores this error code,
- and takes a 'random' value for the pageframe address, which will
- coincidentally be in low memory. As soon as the VM system needs to page
- some data out to EMS, it will write to this address, overwriting
- whatever is there (DOS, device drivers or the interrupt vector table).
- This will usually cause an immediate lockup (or an exception error), and
- explains why a Clipper 5.x program can run for a short while before the
- problem is apparent.
-
- EMM501.OBJ ensures that the signature is matched correctly, and also
- that Clipper will not attempt to use EMS when the pageframe is not
- present.
-
- Malcolm Shedden
- ASM Inc.
- CIS: 76030,1031.
-
-
- History
- -------
-
- 4/20/1993 V1.0 released.
- 5/11/1993 V1.01 the only change is that source code is now included.